home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib05.dsk / APPLE MAPS.bas < prev    next >
BASIC Source File  |  2023-02-26  |  27KB  |  713 lines

  1. 1  REM  *************************************
  2. 2  REM  *    THE APPLE M.A.P.S. SYSTEM      *
  3. 3  REM  * (MARKETING AND PERSONAL SHOPPING) *
  4. 4  REM  *         BY GLENN TEMAN            *
  5. 5  REM  *        APPLESOFT  BASIC           *
  6. 6  REM  *       COPYRIGHT (C) 1981          *
  7. 7  REM  *       BY MICRO-SPARC INC          *
  8. 8  REM  *************************************
  9. 9 :
  10. 10  GOTO 60000: REM  TITLE PG & INIT
  11. 20  REM  ** SEARCH **
  12. 30  REM 
  13. 40  REM  SET K=0 -> COUNT OF HITS
  14. 50 K = 0:L =  LEN(A$):B$ = ""
  15. 60  FOR I = 1 TO LL
  16. 70  REM  PARTIAL LOOKUP - INDEX A HIT IN C%
  17. 80  IF A$ =  LEFT$(N$(I),L)  THEN K = K +1:C%(K) = I
  18. 90  REM  IF >10 HITS, DISPLAY THEM
  19. 100  REM  ON ^, LEAVE SEARCH
  20. 110  IF K >10  THEN  GOSUB 250: IF B$ = "^"  THEN HIT = 0: RETURN 
  21. 120  REM  IF @, A CHOICE WAS MADE
  22. 130  IF B$ = "@"  THEN 190
  23. 140  REM  NO @ OR ^: CONTINUE SEARCH
  24. 150  NEXT 
  25. 160  REM  -NO HITS
  26. 170  IF K = 0  THEN HIT = 0: PRINT "   <NOT FOUND>";P$: RETURN 
  27. 180  REM  -ONE HIT
  28. 190  IF K = 1  THEN  PRINT : PRINT " * ";N$(C%(1)):HIT = C%(1): GOSUB 400: RETURN 
  29. 200  REM  -MORE THAN ONE HIT
  30. 210  REM  ON ^, LEAVE
  31. 220  GOSUB 250: IF B$ = "^"  THEN HIT = 0: RETURN 
  32. 230  REM  A CHOICE WAS MADE
  33. 240  GOTO 190
  34. 250  REM  ** SEARCH DISPLAY **
  35. 260  REM  A% IS FLAG FOR >10 HITS
  36. 270 A% = 0: IF K = 11  THEN K = 10:A% = 1
  37. 280  PRINT 
  38. 290  FOR J = 1 TO K
  39. 300  REM  DISPLAY LIST OF HITS
  40. 310  PRINT J;") ";N$(C%(J))
  41. 320  NEXT 
  42. 330  PRINT : PRINT "<1-";K;" OR ^";: IF A% = 1  THEN  PRINT " OR C(ONTINUE)";
  43. 340  INPUT " > ";B$: IF B$ = "^"  THEN  RETURN 
  44. 350  REM  CONTINUE IF >10 HITS AND 'C'
  45. 360  IF A% = 1  AND B$ = "C"  THEN K = 1:C%(1) = C%(11): RETURN 
  46. 370 B% =  VAL(B$): IF B% <1  OR B% >K  THEN  PRINT  CHR$(7);: GOTO 330
  47. 380  REM  MADE A CHOICE. SET @ FLAG
  48. 390 K = 1:C%(1) = C%(B%):B$ = "@": RETURN 
  49. 400  REM  ** SEARCH: HIT OK? **
  50. 410  PRINT " OK (RTN/N)? ";
  51. 420  INPUT "";A$: IF  LEFT$(A$,1) = "Y"  OR A$ = ""  THEN  RETURN 
  52. 430  REM  OK='NOPE'
  53. 440 HIT = 0: IF A% = 1  THEN K = 1:C%(1) = C%(11): REM  CONTINUE SCH IF >10 HITS
  54. 450  RETURN 
  55. 490  FOR I = 1 TO 750: NEXT I: RETURN 
  56. 499  REM 
  57. 500  REM  ** PRINT GROC LIST **
  58. 510  REM 
  59. 515  REM  SET PR FLAG=1 FOR PRINT
  60. 520 PR = 1:A$ = "PRINT": GOTO 560
  61. 529  REM 
  62. 530  REM  ** VIEW GROC LIST **
  63. 540  REM 
  64. 550 PR = 0:A$ = "VIEW"
  65. 560 A$ = A$ +" GROCERY LIST"
  66. 580  GOSUB 52000: REM  TOP TITLE
  67. 590  VTAB 5: PRINT "BY AISLE OR": CALL  -868
  68. 600  HTAB 4: INPUT "TYPE OF GROCERY (A / T)? ";A$
  69. 610  IF A$ = ""  OR  LEFT$(A$,1) = "A"  THEN L = 0: VTAB 6: HTAB 29: PRINT "AISLE": GOTO 640
  70. 620  IF  LEFT$(A$,1) = "T"  THEN L = 1: VTAB 6: HTAB 29: PRINT "TYPE": GOTO 640
  71. 630  PRINT P$;: GOTO 590
  72. 640  VTAB 12: PRINT "   <PRESS '^' KEY TO ABORT>"
  73. 650  IF   NOT PR  THEN  GOSUB 490: HOME 
  74. 670  IF PR  THEN  PRINT D$;"PR#";SLOT
  75. 680  PRINT "GROCERY LIST": PRINT "============": PRINT 
  76. 690  IF L  THEN 900: REM  GOTO BY TYPE
  77. 700  REM  -BY AISLE-
  78. 710  PRINT D$;"OPEN";FL$;",L40"
  79. 715  REM  LOOP ON AISLES
  80. 720  FOR I = 1 TO SA
  81. 725  REM  SET NEW AISLE FLAG
  82. 730 K = 1
  83. 740  FOR J = 1 TO AI%(I,0)
  84. 750 L = AI%(I,J): IF L = 0  THEN 840
  85. 760  IF  PEEK( -16384) >127  THEN A% =  PEEK( -16384): POKE  -16368,0: IF A% = 222  THEN  PRINT : PRINT "<ABORTED>": GOTO 1070
  86. 770  PRINT D$;"READ";FL$;",R";L
  87. 780  INPUT QOH,FS
  88. 790  IF QOH > = FS  THEN 840
  89. 800  IF K  THEN  PRINT : PRINT "AISLE ";I:K = 0
  90. 810  PRINT  CHR$(95); CHR$(95); CHR$(95);" ";
  91. 820  PRINT FS -QOH; TAB( 8);N$(L);
  92. 830  PRINT "  (";QOH;")"; TAB( 36); CHR$(91);"...]"
  93. 840  NEXT J
  94. 850  NEXT I
  95. 860  PRINT D$;"CLOSE";FL$
  96. 870  GOTO 1070
  97. 899  REM  -BY TYPE-
  98. 900  PRINT D$;"OPEN";FL$;",L40"
  99. 905  REM  LOOP ON TYPES
  100. 910  FOR I = 1 TO ST
  101. 920 K = 1
  102. 930  FOR J = 1 TO TI%(I,0)
  103. 940 L = TI%(I,J)
  104. 950  IF  PEEK( -16384) >127  THEN A% =  PEEK( -16384): POKE  -16368,0: IF A% = 222  THEN  PRINT : PRINT "<ABORTED>": GOTO 1070
  105. 960  PRINT D$;"READ";FL$;",R";L
  106. 970  INPUT QOH,FS
  107. 980  IF QOH > = FS  THEN 1030
  108. 990  IF K  THEN  PRINT : PRINT TP$(I):K = 0
  109. 1000  PRINT  CHR$(95); CHR$(95); CHR$(95);" ";
  110. 1010  PRINT FS -QOH; TAB( 8);N$(L);
  111. 1020  PRINT "  (";QOH;")"; TAB( 36); CHR$(91);"...]"
  112. 1030  NEXT J
  113. 1040  NEXT I
  114. 1050  PRINT D$;"CLOSE";FL$
  115. 1070  PRINT : PRINT D$;"PR#0"
  116. 1080  PRINT "<DONE. HIT ANY KEY TO CONTINUE...";
  117. 1090  GET A$: PRINT 
  118. 1100  RETURN 
  119. 1199  REM 
  120. 1200  REM  ** UPDATE INVENTORY **
  121. 1210  REM 
  122. 1220 A$ = "UPDATE INVENTORY": GOSUB 52000
  123. 1230  VTAB 7: HTAB 1: INPUT "WHICH GROCERY? ";A$
  124. 1240  IF A$ = "^"  OR A$ = ""  THEN  RETURN 
  125. 1250  GOSUB 20: REM  SEARCH
  126. 1260  IF   NOT HIT  THEN  GOSUB 490: VTAB 5: CALL  -958: GOTO 1230
  127. 1265  VTAB 8: CALL  -958: PRINT 
  128. 1270  PRINT N$(HIT)
  129. 1280  PRINT D$;"OPEN";FL$;",L40"
  130. 1290  PRINT D$;"READ";FL$;",R";HIT
  131. 1300  INPUT QOH,FS,IL,TY,C$,HM
  132. 1310  PRINT D$;"CLOSE";FL$
  133. 1320  PRINT "  FULL STOCK=";FS; TAB( 18);"QOH=";QOH
  134. 1330  VTAB 12: CALL  -868: HTAB 5: INPUT "> UPDATE BY (+ OR -N): ";A$
  135. 1340  IF A$ = "^"  OR A$ = ""  THEN  PRINT "   <IGNORED>": GOSUB 490: VTAB 5: CALL  -958: GOTO 1230
  136. 1350 A% =  VAL(A$)
  137. 1360 B% = A% +QOH: IF B% <0  OR B% >99  THEN  PRINT P$;: GOTO 1330
  138. 1363  VTAB 15: PRINT "=> NEW QOH = ";B%: INPUT "   OK (Y)? ";A$
  139. 1365  IF  LEFT$(A$,1) < >"Y"  AND A$ < >""  THEN  VTAB 11: CALL  -958: GOTO 1330
  140. 1370  PRINT D$;"OPEN";FL$;",L40"
  141. 1380  PRINT D$;"WRITE";FL$;",R";HIT
  142. 1390  PRINT B%: PRINT FS: PRINT IL: PRINT TY
  143. 1400  PRINT C$: IF A% >0  THEN HM = HM +A%
  144. 1405  IF HM >9999  THEN HM = 9999
  145. 1410  PRINT HM
  146. 1420  PRINT D$;"CLOSE";FL$
  147. 1440  GOSUB 490: VTAB 5: CALL  -958: GOTO 1230
  148. 1499  REM 
  149. 1500  REM  ** INPUT **
  150. 1510  REM 
  151. 1515  REM  SET ED FLAG TO 0 FOR INPUT
  152. 1520 ED = 0:A$ = "INPUT GROCERY": GOSUB 52000
  153. 1530  IF LL +1 >SZ  THEN  PRINT : PRINT "<THERE ARE ALREADY ";LL;" ITEMS ON FILE.>": PRINT "<THE FILES ARE FULL - INPUT DISALLOWED.>": RETURN 
  154. 1540  GOTO 1580
  155. 1549  REM 
  156. 1550  REM  ** EDIT **
  157. 1560  REM 
  158. 1565  REM  SET ED TO 1 FOR EDIT
  159. 1570 ED = 1:A$ = "EDIT GROCERY": GOSUB 52000
  160. 1580  VTAB 3: CALL  -958
  161. 1590  IF   NOT ED  THEN 1640
  162. 1600  VTAB 4: HTAB 1: CALL  -868: INPUT "WHICH GROCERY? (^ TO END) ";A$: IF A$ = ""  OR A$ = "^"  THEN  RETURN 
  163. 1610  GOSUB 20: REM  SEARCH
  164. 1620  IF   NOT HIT  THEN  GOSUB 490: GOTO 1570
  165. 1630  VTAB 5: HTAB 1: CALL  -958
  166. 1640  VTAB 6: HTAB 1: CALL  -868: PRINT "GROCERY:"
  167. 1650  VTAB 9: HTAB 1: CALL  -868: PRINT "QUANT ON HAND:"
  168. 1660  VTAB 12: HTAB 1: CALL  -868: PRINT "FULL STOCK:"
  169. 1670  VTAB 15: HTAB 1: CALL  -868: PRINT "AISLE:"
  170. 1680  VTAB 18: HTAB 1: CALL  -868: PRINT "TYPE:"
  171. 1690  IF   NOT ED  THEN 1790
  172. 1700  PRINT D$;"OPEN";FL$;",L40"
  173. 1710  PRINT D$;"READ";FL$;",R";HIT
  174. 1715  REM  READ OLD VALUES
  175. 1720  INPUT QOH,FS,IL,TY,C$,HM
  176. 1730  PRINT D$;"CLOSE";FL$
  177. 1740  VTAB 7: HTAB 10: PRINT "(";C$;")"
  178. 1750  VTAB 10: HTAB 16: PRINT "(";QOH;")"
  179. 1760  VTAB 13: HTAB 13: PRINT "(";FS;")"
  180. 1770  VTAB 16: HTAB 8: PRINT "(";IL;")"
  181. 1780  VTAB 19: HTAB 7: PRINT "(";TP$(TY);")"
  182. 1790  VTAB 6: HTAB 11: CALL  -868: INPUT "";A$
  183. 1795  REM  IF ED=1 AND ENTER "" THEN GET DEFAULT
  184. 1800  IF ED  AND A$ = ""  THEN A$ = C$: VTAB 6: HTAB 11: PRINT A$
  185. 1810  IF A$ = ""  OR A$ = "^"  THEN  RETURN 
  186. 1820  IF  LEN(A$) >20  THEN  PRINT P$;: GOTO 1790
  187. 1830  IF ED  THEN 1880
  188. 1840  FOR I = 1 TO LL: IF A$ = N$(I)  THEN 1870
  189. 1850  NEXT 
  190. 1860  GOTO 1880
  191. 1870  HTAB 5: PRINT "<ALREADY ON FILE!>";P$;: GOSUB 490: HTAB 1: CALL  -868: GOTO 1790
  192. 1880 C$ = A$
  193. 1890  VTAB 9: HTAB 17: CALL  -868: INPUT "";A$
  194. 1900  IF A$ = "^"  THEN  CALL  -868: PRINT "   <IGNORED>": GOSUB 490: GOTO 1580
  195. 1910  IF A$ = ""  AND ED  THEN A$ =  STR$(QOH): VTAB 9: HTAB 17: PRINT A$
  196. 1920 A% =  VAL(A$): IF A% <0  OR A% >99  THEN  PRINT P$;: GOTO 1890
  197. 1930 QOH = A%
  198. 1940  VTAB 12: HTAB 14: CALL  -868: INPUT "";A$
  199. 1950  IF A$ = "^"  THEN 1900
  200. 1960  IF A$ = ""  AND ED  THEN A$ =  STR$(FS): VTAB 12: HTAB 14: PRINT A$
  201. 1970 A% =  VAL(A$): IF A% <0  OR A% >99  THEN  PRINT P$;: GOTO 1940
  202. 1980 FS = A%
  203. 1990  VTAB 15: HTAB 9: CALL  -868: INPUT "";A$
  204. 2000  IF A$ = "^"  THEN 1900
  205. 2010  IF ED  AND A$ = ""  THEN A$ =  STR$(IL): VTAB 15: HTAB 9: PRINT A$
  206. 2020 A% =  VAL(A$): IF A% <1  OR A% >(SA)  THEN  PRINT P$;: GOTO 1990
  207. 2030  IF IL < >A%  AND AI%(A%,0) +1 >SQ  THEN  CALL  -868: PRINT "   <AISLE FULL.>";P$;: GOSUB 490: HTAB 1: CALL  -868: GOTO 1990
  208. 2040 NYL = A%
  209. 2050  VTAB 18: HTAB 8: CALL  -868: INPUT "";A$
  210. 2060  IF A$ = "^"  THEN 1900
  211. 2070  IF ED  AND A$ = ""  THEN A$ = TP$(TY): VTAB 18: HTAB 8: PRINT A$
  212. 2080  IF A$ = ""  THEN  PRINT P$;: GOTO 2050
  213. 2090 L =  LEN(A$)
  214. 2095  REM  SEARCH FOR TYPE
  215. 2100  FOR I = 1 TO ST
  216. 2110  IF A$ =  LEFT$(TP$(I),L)  THEN 2140
  217. 2120  NEXT I
  218. 2130  PRINT P$;: GOTO 2050
  219. 2140 A$ = TP$(I): IF TY < >I  AND TI%(I,0) +1 >SQ  THEN  CALL  -868: PRINT "   <TYPE IS FULL>";P$;: GOSUB 490: HTAB 1: CALL  -868: GOTO 2050
  220. 2145  VTAB 18: HTAB 8: CALL  -868: PRINT A$
  221. 2150 NTY = I
  222. 2160  VTAB 21: INPUT "   OK (Y)? ";A$
  223. 2170  IF  LEFT$(A$,1) = "Y"  OR A$ = ""  THEN 2190
  224. 2180  PRINT "   <IGNORED!>";P$;: GOSUB 490: GOTO 1580
  225. 2190  IF   NOT ED  THEN 2350
  226. 2195  REM  ON EDIT, DEINDEX AISLE IF NECESSARY AND REINDEX
  227. 2200 N$(HIT) = C$: IF IL = NYL  THEN 2250
  228. 2210  FOR I = 1 TO SQ
  229. 2215  REM  MOVE LAST ONE IN AISLE TO HOLE LEFT BY REMOVING OLD AISLE
  230. 2220  IF AI%(IL,I) = HIT  THEN AI%(IL,I) = AI%(IL,AI%(IL,0)):AI%(IL,0) = AI%(IL,0) -1: GOTO 2240
  231. 2230  NEXT I
  232. 2235  REM  INDEX NEW AISLE TO LAST POSITION IN AISLE ARRAY
  233. 2240 AI%(NYL,0) = AI%(NYL,0) +1:AI%(NYL,AI%(NYL,0)) = HIT
  234. 2245  REM  CHECK FOR NEED TO DEINDEX-REINDEX NEW TYPE
  235. 2250  IF TY = NTY  THEN 2300
  236. 2260  FOR I = 1 TO SQ
  237. 2270  IF TI%(TY,I) = HIT  THEN TI%(TY,I) = TI%(TY,TI%(TY,0)):TI%(TY,0) = TI%(TY,0) -1: GOTO 2290
  238. 2280  NEXT I
  239. 2290 TI%(NTY,0) = TI%(NTY,0) +1:TI%(NTY,TI%(NTY,0)) = HIT
  240. 2300  PRINT D$;"OPEN";FL$;",L40"
  241. 2310  PRINT D$;"WRITE";FL$;",R";HIT
  242. 2315  REM  WRITE NEW DATA TO DISK
  243. 2320  PRINT QOH: PRINT FS: PRINT NYL: PRINT NTY: PRINT C$: PRINT HM
  244. 2330  PRINT D$;"CLOSE";FL$
  245. 2340  GOTO 2440
  246. 2345  REM  -ON INPUT, INDEX AISLE,TYPE,NAME
  247. 2350 N$(LL +1) = C$:LL = LL +1
  248. 2360 AI%(NYL,0) = AI%(NYL,0) +1:AI%(NYL,AI%(NYL,0)) = LL
  249. 2370 TI%(NTY,0) = TY%(NTY,0) +1:TI%(NTY,TI%(NTY,0)) = LL
  250. 2380  PRINT D$;"OPEN";FL$;",L40"
  251. 2390  PRINT D$;"WRITE";FL$;",R1"
  252. 2395  REM  NEW # OF RECORDS
  253. 2400  PRINT LL
  254. 2410  PRINT D$;"WRITE";FL$;",R";LL
  255. 2415  REM  WRITE NEW DATA TO DISK
  256. 2420  PRINT QOH: PRINT FS: PRINT NYL: PRINT NTY: PRINT C$: PRINT 0
  257. 2430  PRINT D$;"CLOSE";FL$
  258. 2440  VTAB 23: PRINT "   <FILED.>";: GOSUB 490: GOTO 1580
  259. 2499  REM 
  260. 2500  REM  ** VIEW **
  261. 2510  REM 
  262. 2520 A$ = "VIEW": GOSUB 52000
  263. 2530  VTAB 4: INPUT "WHICH GROCERY? ";A$
  264. 2540  IF A$ = "^"  OR A$ = ""  THEN  RETURN 
  265. 2550  GOSUB 20: REM  SEARCH
  266. 2560  IF   NOT HIT  THEN 2680
  267. 2565  VTAB 5: CALL  -958
  268. 2570  PRINT : PRINT "-----------------------------------"
  269. 2580  PRINT D$;"OPEN";FL$;",L40"
  270. 2590  PRINT D$;"READ";FL$;",R";HIT
  271. 2600  INPUT QOH,FS,IL,TY,C$
  272. 2610  PRINT D$;"CLOSE";FL$
  273. 2620  PRINT "GROCERY: ";C$
  274. 2630  PRINT  TAB( 5);"QOH: ";QOH
  275. 2640  PRINT  TAB( 5);"FULL STCK: ";FS
  276. 2650  PRINT  TAB( 5);"AISLE: ";IL
  277. 2660  PRINT  TAB( 5);"TYPE: ";TP$(TY)
  278. 2670  PRINT "-----------------------------------"
  279. 2680  VTAB 23: PRINT "   <HIT ANY KEY TO CONTINUE...";
  280. 2690  GET A$: PRINT 
  281. 2700  GOTO 2520
  282. 2799  REM 
  283. 2800  REM  ** LIST **
  284. 2810  REM 
  285. 2815  REM  L=1 FOR LIST
  286. 2820 A$ = "LIST": GOSUB 52000:L = 1: GOTO 2860
  287. 2829  REM 
  288. 2830  REM  ** PRINT STATS **
  289. 2840  REM 
  290. 2845  REM  L=0 FOR PRNT STATS
  291. 2850 A$ = "PRINT STATISTICS": GOSUB 52000:L = 0
  292. 2860  VTAB 6: PRINT "BY AISLE OR": PRINT "   TYPE OF GROCERY (A / T):"
  293. 2870  VTAB 10: PRINT "TO SCREEN OR PRINTER (SCREEN):"
  294. 2880  VTAB 7: HTAB 29: CALL  -868: INPUT "";A$
  295. 2890  IF A$ = "^"  THEN  RETURN 
  296. 2895  REM  A%=1 FOR AISLE, 0 FOR TYPE
  297. 2900 A$ =  LEFT$(A$,1): IF A$ = "A"  OR A$ = ""  THEN A% = 1: VTAB 7: HTAB 29: PRINT "AISLE": GOTO 2930
  298. 2910  IF A$ = "T"  THEN A% = 0: VTAB 7: HTAB 29: PRINT "TYPE": GOTO 2930
  299. 2920  PRINT P$;: GOTO 2880
  300. 2930  VTAB 10: HTAB 32: CALL  -868: INPUT "";A$
  301. 2940  IF A$ = "^"  THEN  RETURN 
  302. 2945  REM  K=1 FOR PRINTER, 0 FOR SCRN
  303. 2950 A$ =  LEFT$(A$,1): IF A$ = "P"  THEN K = 1: VTAB 10: HTAB 32: PRINT "PRINTER": GOTO 2975
  304. 2960  IF A$ = ""  OR A$ = "S"  THEN K = 0: VTAB 10: HTAB 32: PRINT "SCREEN": GOTO 2975
  305. 2970  PRINT P$;: GOTO 2930
  306. 2975  GOSUB 4500: REM  ASK FROM/TO
  307. 2980  VTAB 21: HTAB 10: PRINT "<TYPE '^' TO ABORT>"
  308. 2990  IF   NOT K  THEN  GOSUB 490: HOME 
  309. 3000  IF K  THEN  PRINT D$;"PR#";SLOT
  310. 3010  PRINT : IF L  THEN  PRINT  TAB( 12);"GROCERY FILE LIST": PRINT : IF   NOT A%  THEN  PRINT "   ITEM"; TAB( 25);"QOH FSTK AISLE"
  311. 3020  IF   NOT L  THEN  PRINT  TAB( 12);"STATISTICS LIST": PRINT : IF   NOT A%  THEN  PRINT "   ITEM"; TAB( 25);"AISLE TO DATE"
  312. 3030  IF A%  THEN 3230
  313. 3035  REM  -BY TYPE
  314. 3040  PRINT 
  315. 3045  PRINT D$;"OPEN";FL$;",L40"
  316. 3047  REM  LOOP FROM FR TO TA AS ENTERED BY USER
  317. 3050  FOR I = FR TO TA
  318. 3060 J = 1
  319. 3070  FOR Q = 1 TO TI%(I,0)
  320. 3080  IF  PEEK( -16384) >127  THEN K =  PEEK( -16384): POKE  -16368,0: IF K = 222  THEN  PRINT : PRINT "<ABORTED>": GOTO 3420
  321. 3090  IF TI%(I,0) = 0  THEN 3190
  322. 3100  IF J  THEN  PRINT : PRINT TP$(I):J = 0
  323. 3110 HIT = TI%(I,Q)
  324. 3130  PRINT D$;"READ";FL$;",R";HIT
  325. 3140  INPUT QOH,FS,IL,TY,C$,HM
  326. 3150  PRINT  TAB( 3);C$; TAB( 25);
  327. 3160  IF L  THEN  PRINT QOH; TAB( 30);FS; TAB( 36);IL
  328. 3170  IF   NOT L  THEN  PRINT "  ";IL; TAB( 35);HM
  329. 3190  NEXT Q
  330. 3200  NEXT I
  331. 3210  GOTO 3420
  332. 3220  REM  -BY AISLE-
  333. 3230  IF L  THEN  PRINT "  ITEM"; TAB( 24);"QOH FS TYPE"
  334. 3240  IF   NOT L  THEN  PRINT "  ITEM"; TAB( 24);"TYPE     TO DATE"
  335. 3250  PRINT 
  336. 3255  PRINT D$;"OPEN";FL$;",L40"
  337. 3260  FOR I = FR TO TA
  338. 3270 J = 1
  339. 3280  FOR Q = 1 TO AI%(I,0)
  340. 3290  IF  PEEK( -16384) >127  THEN K =  PEEK( -16384): POKE  -16368,0: IF K = 222  THEN  PRINT : PRINT "<ABORTED>": GOTO 3420
  341. 3300  IF AI%(I,0) = 0  THEN 3400
  342. 3310  IF J  THEN  PRINT : PRINT "AISLE ";I:J = 0
  343. 3320 HIT = AI%(I,Q)
  344. 3340  PRINT D$;"READ";FL$;",R";HIT
  345. 3350  INPUT QOH,FS,IL,TY,C$,HM
  346. 3360  PRINT "  ";C$; TAB( 24);
  347. 3370  IF L  THEN  PRINT QOH; TAB( 28);FS; TAB( 31); LEFT$(TP$(TY),9)
  348. 3380  IF   NOT L  THEN  PRINT  LEFT$(TP$(TY),9); TAB( 35);HM
  349. 3400  NEXT Q
  350. 3410  NEXT I
  351. 3420  PRINT D$;"PR#0"
  352. 3430  PRINT D$;"CLOSE";FL$
  353. 3450  PRINT "   <HIT ANY KEY TO CONTINUE...";
  354. 3460  GET A$: PRINT 
  355. 3470  RETURN 
  356. 3499  REM 
  357. 3500  REM  ** DELETE **
  358. 3510  REM 
  359. 3520 A$ = "DELETE": GOSUB 52000
  360. 3530  VTAB 5: INPUT "WHICH GROCERY? ";A$
  361. 3540  IF A$ = "^"  OR A$ = ""  THEN  RETURN 
  362. 3550  GOSUB 20: REM  SEARCH
  363. 3560  IF   NOT HIT  THEN  GOSUB 490: VTAB 4: CALL  -958: GOTO 3530
  364. 3570  VTAB 6: CALL  -958
  365. 3580  VTAB 10: PRINT "DELETE ";N$(HIT): INPUT "...ARE YOU SURE? ";A$
  366. 3590  IF  LEFT$(A$,1) < >"Y"  THEN HIT = 0: PRINT "   <NOT DELETED!>": GOTO 3560
  367. 3600  PRINT D$;"OPEN";FL$;",L40"
  368. 3610  PRINT D$;"READ";FL$;",R";HIT
  369. 3620  INPUT I,I,IL,TY
  370. 3630  PRINT D$;"READ";FL$;",R";LL
  371. 3635  INPUT QOH,FS,K,L,C$,HM
  372. 3640  PRINT D$;"CLOSE";FL$
  373. 3645  REM  DEINDEX FROM TYPE AND AISLE ARRAYS
  374. 3650  FOR I = 1 TO TI%(TY,0)
  375. 3660  IF TI%(TY,I) = HIT  THEN 3680
  376. 3670  NEXT I
  377. 3680 TI%(TY,I) = TI%(TY,TI%(TY,0)):TI%(TY,0) = TI%(TY,0) -1
  378. 3690  FOR I = 1 TO AI%(IL,0)
  379. 3700  IF AI%(IL,I) = HIT  THEN 3720
  380. 3710  NEXT I
  381. 3720 AI%(IL,I) = AI%(IL,AI%(IL,0))
  382. 3730 AI%(IL,0) = AI%(IL,0) -1
  383. 3740 N$(HIT) = N$(LL):LL = LL -1
  384. 3745  REM  WRITE LAST RECORD INTO HOLE LEFT BY DELETED RECORD
  385. 3746  REM  WRITE OUT NEW LL (COUNT OF REC'S)
  386. 3750  PRINT D$;"OPEN";FL$;",L40"
  387. 3760  PRINT D$;"WRITE";FL$;",R";HIT
  388. 3770  PRINT QOH: PRINT FS: PRINT K: PRINT L: PRINT C$: PRINT HM
  389. 3780  PRINT D$;"WRITE";FL$;",R1"
  390. 3790  PRINT LL
  391. 3800  PRINT D$;"CLOSE";FL$
  392. 3810  PRINT "   <DELETED.>":HIT = 0: GOTO 3560
  393. 3899  REM 
  394. 3900  REM  ** EDIT STATS **
  395. 3910  REM 
  396. 3920 A$ = "EDIT STATISTICS": GOSUB 52000
  397. 3930  VTAB 6: INPUT "WHICH GROCERY? ";A$
  398. 3940  IF A$ = ""  OR A$ = "^"  THEN  RETURN 
  399. 3945  REM  SEARCH
  400. 3950  GOSUB 20: IF   NOT HIT  THEN  GOSUB 490: VTAB 5: CALL  -958: GOTO 3930
  401. 3960  VTAB 7: CALL  -958
  402. 3970  PRINT D$;"OPEN";FL$;",L40"
  403. 3980  PRINT D$;"READ";FL$;",R";HIT
  404. 3990  INPUT QOH,FS,IL,TY,C$,HM
  405. 4000  PRINT D$;"CLOSE";FL$
  406. 4010  VTAB 10: PRINT C$; TAB( 25);"AISLE ";IL
  407. 4020  PRINT "  (";TP$(TY);")  FL STCK=";FS
  408. 4030  PRINT : PRINT " =>> TO DATE: ";HM
  409. 4040  VTAB 15: HTAB 1: CALL  -868: INPUT "UPDATE STATS BY (+ OR -N): ";A$
  410. 4050  IF A$ = "^"  THEN  RETURN 
  411. 4055  IF  LEN(A$) >4  THEN  PRINT P$;: GOTO 4040
  412. 4060 A% =  VAL(A$):A% = A% +HM
  413. 4070  IF A% <0  OR A% >9999  THEN  PRINT P$;: GOTO 4040
  414. 4080  VTAB 17: HTAB 5: CALL  -868: PRINT "NEW TO DATE: ";A%
  415. 4090  HTAB 5: INPUT " OK (Y)? ";A$
  416. 4100  IF  LEFT$(A$,1) < >"Y"  AND A$ < >""  THEN  PRINT "   <NOT FILED.>": GOSUB 490: VTAB 14: CALL  -958: GOTO 4040
  417. 4110  PRINT D$;"OPEN";FL$;",L40"
  418. 4120  PRINT D$;"WRITE";FL$;",R";HIT
  419. 4130  PRINT QOH: PRINT FS: PRINT IL: PRINT TY: PRINT C$
  420. 4140  PRINT A%: REM  NEW TO DATE
  421. 4150  PRINT D$;"CLOSE";FL$
  422. 4160  PRINT "   <FILED.>": GOSUB 490: VTAB 5
  423. 4170  CALL  -958: GOTO 3930
  424. 4199  REM 
  425. 4200  REM  ** VIEW STATS **
  426. 4210  REM 
  427. 4220 A$ = "VIEW A GROCERY'S STATS": GOSUB 52000
  428. 4230  VTAB 6: INPUT "WHICH GROCERY? (^ TO END) ";A$
  429. 4240  IF A$ = ""  OR A$ = "^"  THEN  RETURN 
  430. 4245  REM  SEARCH
  431. 4250  GOSUB 20: IF   NOT HIT  THEN  GOSUB 490: VTAB 5: CALL  -958: GOTO 4230
  432. 4260  VTAB 7: CALL  -958
  433. 4270  PRINT D$;"OPEN";FL$;",L40"
  434. 4280  PRINT D$;"READ";FL$;",R";HIT
  435. 4290  INPUT QOH,FS,IL,TY,C$,HM
  436. 4300  PRINT D$;"CLOSE";FL$
  437. 4310  PRINT : PRINT "-----------------------------------"
  438. 4320  PRINT "GROCERY: ";C$
  439. 4330  PRINT  TAB( 5);"FULL STOCK: ";FS
  440. 4340  PRINT  TAB( 5);"AISLE: ";IL
  441. 4350  PRINT  TAB( 5);"TYPE: ";TP$(TY)
  442. 4360  PRINT : PRINT  TAB( 5);"=>> TO DATE: ";HM
  443. 4370  PRINT "-----------------------------------"
  444. 4380  VTAB 20: PRINT "   <HIT ANY KEY TO CONTINUE...";
  445. 4390  GET A$: PRINT 
  446. 4400  VTAB 5: CALL  -958
  447. 4410  GOTO 4230
  448. 4499  REM 
  449. 4500  REM  -ASK FROM/TO-
  450. 4502  REM  FOR 'LIST' AND 'PRNT STATS'
  451. 4505  REM 
  452. 4510  IF A%  THEN 4610
  453. 4515  REM  -TYPE-
  454. 4520  VTAB 14: HTAB 1: CALL  -868: INPUT "FOR GROCERY TYPE (ALL): ";A$
  455. 4540  IF A$ = "^"  THEN  POP : RETURN 
  456. 4550  IF A$ = ""  OR  LEFT$(A$,3) = "ALL"  THEN FR = 1:TA = ST: VTAB 14: HTAB 25: PRINT "ALL": RETURN 
  457. 4560 J =  LEN(A$): FOR I = 1 TO ST: IF A$ =  LEFT$(TP$(I),J)  THEN 4590
  458. 4570  NEXT I
  459. 4580  PRINT P$;: GOTO 4520
  460. 4590  VTAB 14: HTAB 25: PRINT TP$(I)
  461. 4600 FR = I:TA = I: RETURN 
  462. 4610  REM  -AISLE-
  463. 4620  VTAB 14: HTAB 1: PRINT "FROM AISLE (FIRST):"
  464. 4630  VTAB 17: HTAB 1: PRINT "TO AISLE (LAST):"
  465. 4640  VTAB 14: HTAB 21: CALL  -868: INPUT "";A$
  466. 4650  IF A$ = "^"  THEN  POP : RETURN 
  467. 4660  IF A$ = ""  THEN A$ = "1": VTAB 14: HTAB 21: PRINT "FIRST"
  468. 4670 FR =  VAL(A$): IF FR <1  OR FR >(SA)  THEN  PRINT P$;: GOTO 4640
  469. 4680  VTAB 17: HTAB 18: CALL  -868: INPUT "";A$
  470. 4690  IF A$ = "^"  THEN  POP : RETURN 
  471. 4700  IF A$ = ""  THEN A$ =  STR$(SA): VTAB 17: HTAB 18: PRINT "LAST"
  472. 4710 TA =  VAL(A$): IF TA <1  OR TA >(SA)  THEN  PRINT P$;: GOTO 4680
  473. 4720  IF FR >(TA)  THEN  VTAB 17: HTAB 30: PRINT "<ORDER?>";P$;: GOSUB 490: HTAB 18: CALL  -868: GOTO 4640
  474. 4730  RETURN 
  475. 17999  REM 
  476. 18000  REM  -DATA FOR TYPES-
  477. 18010  REM 
  478. 18020  DATA  BAKING,BEVERAGES,BREAKFAST,CANNED,COOKIES/CAKES/BREAD,DAIRY
  479. 18030  DATA  DETERGENTS,DESSERTS,FROZEN,MEATS,MISCELLANEOUS,PAPER GOODS,PRODUCE,SPICES/DRESSINGS
  480. 19999  REM 
  481. 20000  REM  ** INIT FILES **
  482. 20010  REM 
  483. 20020 A$ = "INITIALIZE FILES": GOSUB 52000
  484. 20030  VTAB 10: PRINT "   <INITIALIZING ";FL$;"....."
  485. 20040  PRINT : PRINT :QOH = 0:FS = 0:HM = 0:LL = 2
  486. 20045  GOSUB 20250: REM  INIT ARRAYS
  487. 20047  PRINT D$;"OPEN";FL$;",L40"
  488. 20050  FOR I = 1 TO ST
  489. 20060  READ TY,K
  490. 20070  FOR J = 1 TO K
  491. 20080  READ C$,IL
  492. 20100  PRINT D$;"WRITE";FL$;",R";LL
  493. 20110  PRINT QOH: PRINT FS: PRINT IL: PRINT TY: PRINT C$: PRINT HM
  494. 20120  REM  INDEX ARRAYS (TYPE,AISLE,NAME)
  495. 20140 TI%(TY,0) = TI%(TY,0) +1:TI%(TY,TI%(TY,0)) = LL
  496. 20150 AI%(IL,0) = AI%(IL,0) +1:AI%(IL,AI%(IL,0)) = LL
  497. 20170 N$(LL) = C$
  498. 20175 LL = LL +1
  499. 20180  NEXT J
  500. 20200  NEXT I
  501. 20205  PRINT D$;"CLOSE";FL$
  502. 20207  REM  DECREMENT LL: COUNT OF ITEMS
  503. 20210 LL = LL -1
  504. 20215  GOSUB 20350: REM  WRITE LL TO DISK
  505. 20220  PRINT : PRINT P$;"ALL DONE."
  506. 20230  GOSUB 490
  507. 20240  RETURN 
  508. 20250  REM  -INIT ARRAYS
  509. 20260  FOR I = 0 TO ST
  510. 20270  FOR J = 1 TO SQ
  511. 20280 TI%(I,J) = 0
  512. 20290  NEXT J,I
  513. 20300  FOR I = 1 TO SA
  514. 20310  FOR J = 1 TO SQ
  515. 20320 AI%(I,J) = 0
  516. 20330  NEXT J,I
  517. 20340  RETURN 
  518. 20349  REM  -1ST RECORD: LL (COUNT)
  519. 20350  PRINT D$;"OPEN";FL$;",L40"
  520. 20360  PRINT D$;"WRITE";FL$;",R1"
  521. 20370  PRINT LL
  522. 20380  PRINT D$;"CLOSE";FL$
  523. 20390  RETURN 
  524. 20400  REM  -DATA
  525. 20410  REM  TYPE,COUNT
  526. 20420  DATA  1,13
  527. 20425  REM  NAME,AISLE
  528. 20430  DATA  RAISINS,4,NUTS,4,SUGAR,4,FLOUR,4,BROWN SUGAR,4,BAKING SODA,4,BAKING POWDER,4,CINNAMON,4,NUTMEG,4
  529. 20440  DATA  VANILLA FLAVORING,4,SHORTENING,4,BAKING CHOCOLATE,4,SHREDDED COCONUT,4
  530. 20450  DATA  2,3
  531. 20460  DATA  COFFEE,4,TEA,4,SODA,6
  532. 20470  DATA  3,2
  533. 20480  DATA  CEREAL,5,PANCAKE MIX,4
  534. 20490  DATA  4,16
  535. 20500  DATA  CORN-SM CAN,2,CORN-LG CAN,2,PEAS-CAN,2,GR BEANS-CAN,2,MUSHROOMS-CAN,2,BEETS-CAN,2,TOMATO SOUP,5
  536. 20510  DATA  VEGETABLE SOUP,5,CHICKEN SOUP,5,TOMATO PASTE,5,FRUIT COCKTAIL,2,PEACHES-CAN,2,PEARS-CAN,2
  537. 20520  DATA  GRAPEFRUIT-CAN,2,CRANBERRIES,2,PINEAPPLE-CAN,2
  538. 20530  DATA  5,4
  539. 20540  DATA  CRACKERS,5,COOKIES,5,CAKE,5,BREAD,5
  540. 20550  DATA  6,5
  541. 20560  DATA  CHEESE,12,MILK,12,BUTTER,12,MARGARINE,12,EGGS,12
  542. 20570  DATA  7,4
  543. 20580  DATA  SOAP,8,SHAMPOO,8,DETERGENT,8,FABRIC SOFTENER,8
  544. 20590  DATA  8,3
  545. 20600  DATA  GELATIN,7,PUDDING,7,ICE CREAM,11
  546. 20610  DATA  9,5
  547. 20620  DATA  CARROTS-FROZ,10,GR BEANS-FROZ,10,CORN-FROZ,10,BROCCOLLI-FROZ,10,FRENCH FRIES,10
  548. 20630  DATA  10,5
  549. 20640  DATA  COLD CUTS,10,CHICKEN,1,PORK,1,BEEF,1,FISH,1
  550. 20650  DATA  11,5
  551. 20660  DATA  JAM/JELLY,3,PEANUT BUTTER,3,MARSHMALLOW,3,SOAP PADS,8,SPONGES,8
  552. 20670  DATA  12,5
  553. 20680  DATA  TISSUES,8,TOILET PAPER,8,NAPKINS,8,PAPER TOWELS,8,PAPER CUPS,8
  554. 20690  DATA  13,17
  555. 20700  DATA  ORANGES,1,APPLES,1,BANANAS,1,PEACHES,1,PEARS,1,GRAPES,1,CHERRIES,1,CANTELOUPE,1,WATERMELON,1,SQUASH,1
  556. 20710  DATA  LETTUCE,1,TOMATOES,1,CELERY,1,CUCUMBERS,1,GREEN PEPPERS,1,CARROTS,1,POTATOES,1
  557. 20720  DATA  14,9
  558. 20730  DATA  MUSTARD,9,PICKLES,9,PICKLE RELISH,9,KETCHUP,9,SALT,9,PEPPER,9,SALAD DRESSING,9,OIL,9,TOMATO SAUCE,9
  559. 29999  REM 
  560. 30000  REM  ** QUIT **
  561. 30010  REM 
  562. 30020 A$ = "QUIT": GOSUB 52000
  563. 30030  VTAB 6
  564. 30040  INPUT "ARE YOU SURE? ";A$
  565. 30050  IF  LEFT$(A$,1) < >"Y"  THEN  RETURN 
  566. 30060  VTAB 10: PRINT "APPLE MAPS"; TAB( 24);"BY GLENN TEMAN"
  567. 30070  PRINT "(C) 1981"; TAB( 24);"NIBBLE MAGAZINE"
  568. 30080  VTAB 20: PRINT "GOODBYE!": PRINT 
  569. 30090  END 
  570. 49999  REM 
  571. 50000  REM  ** MAIN MENU **
  572. 50010  REM 
  573. 50020  HOME : PRINT  TAB( 14);: INVERSE 
  574. 50030  PRINT " APPLE MAPS ": NORMAL : VTAB 5
  575. 50040  PRINT "1 - VIEW GROCERY LIST": PRINT 
  576. 50050  PRINT "2 - PRINT GROCERY LIST": PRINT 
  577. 50060  PRINT "3 - UPDATE INVENTORY": PRINT 
  578. 50070  PRINT "4 - FILE MAINTENANCE": PRINT 
  579. 50080  PRINT "5 - STATISTICS": PRINT 
  580. 50090  PRINT "6 - QUIT"
  581. 50095  PRINT : PRINT "THE '^' WILL ALLOW YOU TO RETURN TO": PRINT "THE MENU FROM A SELECTED OPTION."
  582. 50100  VTAB 21
  583. 50110  INPUT "OPTION: ";A$:J =  VAL(A$)
  584. 50120  IF J <1  OR J >6  THEN  PRINT P$: GOTO 50020
  585. 50130  ON J GOSUB 530,500,1200,51000,51350,30000
  586. 50140  GOTO 50020
  587. 50999  REM 
  588. 51000  REM  ** FILE MNT MENU **
  589. 51010  REM 
  590. 51020  HOME : PRINT  TAB( 14);: INVERSE 
  591. 51030  PRINT " APPLE MAPS ": NORMAL : VTAB 3
  592. 51040  PRINT "** FILE MAINTENANCE **": VTAB 6
  593. 51050  PRINT "0 - RETURN TO MAIN MENU": PRINT 
  594. 51060  PRINT "1 - INPUT GROCERY": PRINT 
  595. 51070  PRINT "2 - EDIT GROCERY": PRINT 
  596. 51080  PRINT "3 - VIEW GROCERY": PRINT 
  597. 51090  PRINT "4 - LIST INVENTORY": PRINT 
  598. 51100  PRINT "5 - DELETE GROCERY": PRINT 
  599. 51110  PRINT "6 - (INITIALIZE FILES)"
  600. 51120  VTAB 22
  601. 51130  INPUT "F.MNT.OPTION: ";A$:J =  VAL(A$)
  602. 51140  IF J <0  OR J >6  THEN  PRINT P$: GOTO 51020
  603. 51150  IF J = 0  AND  LEFT$(A$,1) < >"0"  THEN  PRINT P$: GOTO 51020
  604. 51160  IF J < >6  THEN 51270
  605. 51170  REM  -INIT FILES CHOSEN-
  606. 51180  HOME : VTAB 7
  607. 51190  PRINT "INITIALIZE FILES...YOU SHOULD ONLY DO"
  608. 51200  PRINT "THIS WHEN YOU'RE FIRST USING THIS SOFT-"
  609. 51210  PRINT "WARE! THIS OPTION WILL DESTROY THE FILE"
  610. 51220  PRINT "NAMED ";FL$;" AND CREATE A NEW"
  611. 51230  PRINT "ONE ....."
  612. 51240  VTAB 20: INPUT "INITIALIZE? ";A$
  613. 51250  IF  LEFT$(A$,1) < >"Y"  THEN 51020
  614. 51260  REM  -OK TO PROCEED-
  615. 51270  IF J = 0  THEN  RETURN : REM  TO MAIN MENU
  616. 51280  ON J GOSUB 1500,1550,2500,2800,3500,20000
  617. 51290  GOTO 51020
  618. 51349  REM 
  619. 51350  REM  ** STATS MENU **
  620. 51360  REM 
  621. 51370  HOME : PRINT  TAB( 14);: INVERSE 
  622. 51380  PRINT " APPLE MAPS ": NORMAL : VTAB 4
  623. 51390  PRINT "** STATISTICS **": VTAB 8
  624. 51400  PRINT "0 - RETURN TO MAIN MENU": PRINT 
  625. 51410  PRINT "1 - EDIT STATISTICS": PRINT 
  626. 51420  PRINT "2 - PRINT STATISTICS": PRINT 
  627. 51430  PRINT "3 - VIEW A GROCERY'S STATISTICS"
  628. 51440  VTAB 20
  629. 51450  INPUT "STATS.OPTION: ";A$:J =  VAL(A$)
  630. 51460  IF J <0  OR J >3  THEN  PRINT P$: GOTO 51370
  631. 51470  IF J = 0  AND  LEFT$(A$,1) < >"0"  THEN  PRINT P$: GOTO 51370
  632. 51480  IF J = 0  THEN  RETURN : REM  TO MAIN MENU
  633. 51490  ON J GOSUB 3900,2830,4200
  634. 51500  GOTO 51370
  635. 51999  REM 
  636. 52000  REM  ** TITLES **
  637. 52010  REM 
  638. 52015  HOME 
  639. 52020 A$ = " " +A$ +" "
  640. 52030  PRINT  TAB( (40 - LEN(A$))/2);
  641. 52040  INVERSE : PRINT A$: NORMAL 
  642. 52050  PRINT 
  643. 52060  RETURN 
  644. 52099  REM 
  645. 52100  REM  ** TYPES OF GROCS **
  646. 52110  REM 
  647. 52120  FOR I = 1 TO ST
  648. 52130  READ TP$(I)
  649. 52140  NEXT I
  650. 52145  REM  DATA @18000
  651. 52150  RETURN 
  652. 60000  REM  ** TITLE PG & INIT **
  653. 60005  HOME 
  654. 60010  VTAB 10: HTAB 10: INVERSE : FOR F = 1 TO 25: PRINT "*";: NEXT : NORMAL : PRINT 
  655. 60030  HTAB 10: PRINT "THE APPLE M.A.P.S. SYSTEM": HTAB 10: PRINT "       BY GLENN TEMAN    ": HTAB 10: PRINT "     COPYRIGHT (C) 1981  ": HTAB 10: PRINT "     BY MICRO-SPARC INC  "
  656. 60040  HTAB 10: INVERSE : FOR F = 1 TO 25: PRINT "*";: NEXT : NORMAL : PRINT 
  657. 60200  REM  -INIT-
  658. 60205  REM  SLOT=PRINT SLOT,SZ=SZ OF NAME ARRAY, SA=SZ OF AISLE ARRAY
  659. 60206  REM  ST=SZ OF TYPE ARRAY,SQ=# IN EACH TYPE/AISLE
  660. 60210 D$ =  CHR$(4):SLOT = 1:SZ = 300:SA = 14:ST = 14:SQ = 30
  661. 60220  DIM N$(SZ),AI%(SA,SQ),TI%(ST,SQ)
  662. 60228  REM  ARRAY FOR HITS AND TYPE NAMES
  663. 60230  DIM C%(11),TP$(ST): GOSUB 52100
  664. 60240 FL$ = "GROCERIES.FILE":P$ =  CHR$(7):I = 0
  665. 60250  REM  -READ FILE-
  666. 60260  ONERR  GOTO 62000
  667. 60270  PRINT D$;"OPEN";FL$;",L40"
  668. 60280  PRINT D$;"READ";FL$;",R1"
  669. 60290  INPUT LL
  670. 60300  FOR I = 2 TO LL
  671. 60310  PRINT D$;"READ";FL$;",R";I
  672. 60320  INPUT J,K,IL,TY,A$
  673. 60325  REM  INDEX ARRAYS
  674. 60330 N$(I) = A$:AI%(IL,0) = AI%(IL,0) +1
  675. 60340 AI%(IL,AI%(IL,0)) = I:TI%(TY,0) = TI%(TY,0) +1
  676. 60350 TI%(TY,TI%(TY,0)) = I
  677. 60360  NEXT I
  678. 60370  PRINT D$;"CLOSE";FL$
  679. 60380  VTAB 23: HTAB 6: PRINT "<HIT ANY KEY TO CONTINUE...";P$;
  680. 60385  REM  OFF THE ONERR
  681. 60390  POKE 216,0: GET A$: PRINT 
  682. 60395  TEXT 
  683. 60400  GOTO 50000: REM  MAIN MENU
  684. 61999  REM 
  685. 62000  REM  ** HANDLE ONERR **
  686. 62010  REM 
  687. 62020  REM  ONLY HANDLE 'OUT OF DATA' DUE TO FILE NOT THERE
  688. 62030 J =  PEEK(222):K =  PEEK(218) + PEEK(219) *256
  689. 62040  IF J < >5  THEN 62200
  690. 62050  REM  -OUT OF DATA-
  691. 62055  REM  IF I>3 THEN OUT OF DATA NOT CAUSED BY MISSING FILE!
  692. 62060  IF I >3  THEN 62200
  693. 62070  PRINT D$;"DELETE";FL$
  694. 62080  POKE 216,0
  695. 62090  VTAB 23: HTAB 6: PRINT "<HIT ANY KEY TO CONTINUE...";
  696. 62100  GET A$: PRINT 
  697. 62105  TEXT 
  698. 62110  HOME : VTAB 5
  699. 62120  PRINT FL$;" DOES NOT EXIST ON THIS": PRINT "DISK. PLEASE INSERT A DISK THAT IS NOT"
  700. 62130  PRINT "WRITE-PROTECTED WITH AT LEAST 60 EMPTY": PRINT "SECTORS.": PRINT 
  701. 62140  PRINT "USE THE 'INITIALIZE' OPTION UNDER FILE": PRINT "MAINTENANCE TO SET UP THIS FILE."
  702. 62150  VTAB 20: HTAB 6: PRINT "<HIT ANY KEY TO CONTINUE...";: GET A$: PRINT 
  703. 62160  GOTO 50000: REM  MENU
  704. 62200  REM  -OTHER ERROR-
  705. 62205  TEXT 
  706. 62210  HOME : VTAB 5: PRINT P$;P$;P$
  707. 62220  PRINT "ERROR: ";J
  708. 62230  PRINT "     ON LINE ";K;" ..."
  709. 62240  PRINT : PRINT "<ABORTING.>": PRINT : PRINT 
  710. 62250  END 
  711. 62255  REM 
  712. 62260  REM  (C) GLENN TEMAN
  713. 62265  REM  NIBBLE MAGAZINE 1981